package com.babel17.netbeans;
import java.util.*;
import org.netbeans.modules.parsing.spi.*;
import org.netbeans.modules.parsing.spi.Parser.Result;
import com.babel17.interpreter.parser.ErrorMessage;
import com.babel17.syntaxtree.Location;
import javax.swing.text.Document;
import javax.swing.text.StyledDocument;
import javax.swing.text.BadLocationException;
import org.netbeans.spi.editor.hints.*;
import org.openide.text.NbDocument;
import org.netbeans.spi.editor.errorstripe.*;
class SyntaxErrorsHighlightingTask extends ParserResultTask {
public SyntaxErrorsHighlightingTask() {
}
@Override
public void run(Result result, SchedulerEvent event) {
try {
Babel17Parser.Babel17ParserResult babel17Result =
(Babel17Parser.Babel17ParserResult) result;
Collection<ErrorMessage> syntaxErrors = babel17Result.getErrors();
Document document = result.getSnapshot().getSource().getDocument(false);
List<ErrorDescription> errors = new ArrayList<ErrorDescription>();
for (ErrorMessage error : syntaxErrors) {
Location loc = error.location().normalize();
int start = NbDocument.findLineOffset((StyledDocument) document,
loc.startLine() - 1) + loc.startColumn() - 1;
int end = NbDocument.findLineOffset((StyledDocument) document,
loc.endLine() - 1) + loc.endColumn();
ErrorDescription errorDescription = ErrorDescriptionFactory.createErrorDescription(
Severity.ERROR,
error.message(),
document,
document.createPosition(start),
document.createPosition(end));
errors.add(errorDescription);
}
HintsController.setErrors(document, "Babel-17", errors);
Babel17EditorStatusProvider p = (Babel17EditorStatusProvider)
document.getProperty(Babel17EditorStatusProviderFactory.PROP);
if (p != null)
p.setStatus(UpToDateStatus.UP_TO_DATE_OK);
} catch (BadLocationException ex1) {
//Exceptions.printStackTrace (ex1);
// } catch (org.netbeans.modules.parsing.spi.ParseException ex1) {
//Exceptions.printStackTrace (ex1);
}
}
@Override
public int getPriority() {
return 100;
}
@Override
public Class<? extends Scheduler> getSchedulerClass() {
return Scheduler.EDITOR_SENSITIVE_TASK_SCHEDULER;
}
@Override
public void cancel() {
}
}